import date from '@/helper/date';

// 时间区间，前几月配置
export const dateRangeOptions = {
  shortcuts: [
    {
      text: '本月',
      onClick(picker) {
        const end = new Date();
        const start = new Date();
        start.setDate(1)

        picker.$emit('pick', [start, end]);
      }
    },
    {
      text: '上月',
      onClick(picker) {
        const end = new Date()
        const start = new Date();
        start.setDate(1)
        start.setMonth(start.getMonth() - 1)

        end.setDate(1)
        end.setDate(end.getDate() - 1)

        picker.$emit('pick', [start, end]);
      }
    },
    {
      text: '最近一个月',
      onClick(picker) {
        const end = new Date();
        const start = new Date();
        start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
        picker.$emit('pick', [start, end]);
      }
    },
    {
      text: '最近三个月',
      onClick(picker) {
        const end = new Date();
        const start = new Date();
        start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
        picker.$emit('pick', [start, end]);
      }
    }
  ]
}

// 时间，未来配置
export const dateFutureOptions = {
  shortcuts: [
    {
      text: '一个月后',
      onClick(picker) {
        const now = new Date()
        now.setMonth(now.getMonth() + 1);
        picker.$emit('pick', now)
      }
    },
    {
      text: '两个月后',
      onClick(picker) {
        const now = new Date()
        now.setMonth(now.getMonth() + 2);
        picker.$emit('pick', now)
      }
    },
    {
      text: '三个月后',
      onClick(picker) {
        const now = new Date()
        now.setMonth(now.getMonth() + 3);
        picker.$emit('pick', now)
      }
    },
    {
      text: '半年后',
      onClick(picker) {
        const now = new Date()
        now.setMonth(now.getMonth() + 6);
        picker.$emit('pick', now)
      }
    }
  ]
}

// 月初-月末
export function getCurrMonthDate() {
  const start = new Date()
  const end = new Date()
  start.setDate(1)

  const _start = date(start, 'yyyy-MM-dd')
  const _end = date(end, 'yyyy-MM-dd')
  return [_start, _end]
}

// 上个月月初-月末
export function getLastMonthDate() {
  const start = new Date()
  const end = new Date()
  start.setDate(1)
  end.setDate(0)

  const _start = date(start, 'yyyy-MM-dd', {M: -1})
  const _end = date(end, 'yyyy-MM-dd')
  return [_start, _end]
}

// 最近三个月
export function getMonthDate3() {
  const end = new Date();
  const start = new Date();
  start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
  const _start = date(start, 'yyyy-MM-dd')
  const _end = date(end, 'yyyy-MM-dd')
  return [_start, _end]
}

// 今天
export function getCurrDate() {
  return date(new Date(), 'yyyy-MM-dd')
}

// 现在
export function getCurrTime() {
  return date(new Date(), 'yyyy-MM-dd hh:mm:ss')
}
// 今年
export function getYear() {
  return new Date().getFullYear() + ''
}

// 本月
export function getMonth() {
  return date(new Date(), 'yyyy-MM')
}

export function getPrevMonth() {
  return date(new Date(), 'yyyy-MM', {M: -1})
}


// 开始结束日期 ——> 期间日期
export const getAllDate = (start, end) => {
  let dateArr = []
  if(start === end ) return [start]

  while (start < end) {
    dateArr.push(start)
    start = date(start, 'yyyy-MM-dd', {d: +1})
  }
  dateArr.push(end)
  return dateArr
}

// 向前获取多少天
export function getPrevDay(num, format) {
  format = format || 'yyyy-MM-dd'
  var start = 0
  const now = new Date()
  var times = []

  while (start < num) {
    var day = date(now, format, {
      d : -start
    })
    times.push(day)
    start++
  }

  return times.reverse()
}


/**
 * 向前获取月份
 * @param num
 * @param format
 * @returns
 */
export function getPrevMonths(num, format) {
  format = format || 'yyyy-MM'
  var start = 0

  var times = []

  while (start < num) {
    const now = new Date()
    now.setMonth(now.getMonth() - start, 1)
    var day = date(now, format)
    times.push(day)
    start++
  }

  return times.reverse()
}

/**
 * 本周的第一天
 * @param date
 * @param startOfWeek
 * @returns {Date}
 */
export function getFirstDayOfWeek(date, startOfWeek = 1) {
  const d = new Date(date);
  const day = d.getDay(); // 获取当前星期几（0 为周日，1 为周一，依此类推）
  // 计算与周第一天的差值，确保结果为正数
  const diff = (day - startOfWeek + 7) % 7;
  d.setDate(d.getDate() - diff);
  return d;
}

/**
 * 本周最后一天
 * @param date
 * @param startOfWeek
 * @returns {Date}
 */
export function getLastDayOfWeek(date, startOfWeek = 1) {
  const d = new Date(date);
  const day = d.getDay(); // 当前星期几（0=周日，1=周一，...6=周六）

  // 计算周的最后一天的星期数（例如：周一起始，则最后一天是周日=0）
  const lastDayOfWeek = (startOfWeek + 6) % 7;

  // 计算当前日期到周末的天数差
  let diff = (lastDayOfWeek - day + 7) % 7;
  d.setDate(d.getDate() + diff);

  // 可选：清除时间部分
  d.setHours(0, 0, 0, 0);
  return d;
}


// 辅助函数：将日期字符串解析为UTC时间的Date对象
export function parseDateToUTC(dateStr) {
  const [year, month, day] = dateStr.split('-').map(Number);
  return new Date(Date.UTC(year, month - 1, day)); // 月份从0开始
}

// 辅助函数：获取UTC时间的当天开始（0点）
export function getStartOfDayUTC(date) {
  const d = new Date(date);
  d.setUTCHours(0, 0, 0, 0);
  return d;
}

// 日期天数差
export function getDayDiff(start, end) {
  // 计算绝对差值（毫秒）
  const diffMs = end - start
  // 转换为天数（向下取整）
  const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));

  return diffDays;
}


export const dateOpt = {
  type: 'date',
  options: {
    dateFormat: 'YYYY-MM-DD',
    datePickerConfig:{
      i18n:{
        previousMonth:'Previous Month',
        nextMonth:'Next Month',
        months:[
          '一月',
          '二月',
          '三月',
          '四月',
          '五月',
          '六月',
          '七月',
          '八月',
          '九月',
          '十月',
          '十一月',
          '十二月'
        ],
        weekdays:['日', '一', '二', '三', '四', '五', '六'],
        weekdaysShort:['日', '一', '二', '三', '四', '五', '六']
      }
    }
  }
}
